import { createStore, applyMiddleware, combineReducers } from "redux";
import thunk from "redux-thunk";

//写一个函数用来获取所有的reucers
function getReducers() {
    // require.context函数接受三个参数
    // directory {String} -读取文件的路径
    // useSubdirectories {Boolean} -是否遍历文件的子目录
    // regExp {RegExp} -匹配文件的正则
    // 返回一个函数函数有3个属性： resolve, keys, id。
    // resolve：是一个函数，它返回请求被解析后得到的模块 id。
    // keys：也是一个函数，它返回一个数组，由所有可能被上下文模块处理的请求组成。
    // id：是上下文模块里面所包含的模块 id. 它可能在你使用 module.hot.accept 的时候被用到
    let files = require.context("./reducers", true, /\.js$/)
    return files.keys().reduce((pre, item) => {
        let key = item.match(/\.\/(\w+)\.js$/)[1];
        pre[key] = files(item).default
        return pre
    }, {})
}
const reducer = combineReducers(getReducers())
const store = createStore(reducer, applyMiddleware(thunk));

export default store;